//时间复杂度O(n^3)，会爆T
#include <iostream>
using namespace std;

const int N = 1010;

int n;
int a[N];
int f[N]; //记录1~i中以i结尾的最长上升子序列
int g[N]; //记录i~n中一i开头的最长下降子序列
int res = 0;

int main()
{
    freopen("cin.txt", "r", stdin);
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    for (int i = 1; i <= n; ++i) //这里是预处理遍历出所有的折中方式
    {
        for (int j = 1; j <= i; ++j) //每一轮都是找到以j结尾的最长上升子序列
        {
            f[j] = 1;                   //我至少有我自己
            for (int k = 1; k < j; ++k) //遍历所有前面的数
                if (a[k] < a[j])        //前面要比后面的小
                    f[j] = max(f[j], f[k] + 1);
        }
        for (int j = n; j >= i; --j) //每一轮找的都是以j开头的最长下降子序列
        {
            g[j] = 1; //我还是至少有我自己
            for (int k = n; k > j; --k)
                if (a[k] < a[j])
                    g[j] = max(g[j], g[k] + 1);
        }
        res = max(res, f[i] + g[i] - 1);
    }
    cout << res;
}